﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller;
using Interfaces;

namespace Fejllog
{
    public partial class FrmStatistik : Form
    {
        ClsSystemController systemController; 

        public FrmStatistik(ClsSystemController systemController)
        {
            InitializeComponent();
            this.systemController = systemController;
        }

        private void btnTilbage_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void FrmStatistik_Load(object sender, EventArgs e)
        {
            List<string> listAntal = new List<string>(); 
            
            foreach (IClsFejllog x in systemController.VisAlleFejl())
            {
                string samligning = x.FejlType;
                int antal = 0;
                bool eksister = false;
                int samligningÅr = 0;
                int samligningMdr = 0;
                int samligningDag = 0;

                #region Finder nyeste dato
                foreach (IClsFejllog z in systemController.VisAlleFejl())
                {
                    // Finder rigtig fejlmeddelse
                    if (z.FejlType == x.FejlType)
                    {
                        // Hvis året på liste y er stører end den der samlignes med, så bliver nuværende dato den som "y" er
                        if(samligningÅr < int.Parse(z.FejlDato.Year.ToString()))
                        {
                            samligningÅr = int.Parse(z.FejlDato.Year.ToString());
                            samligningMdr = int.Parse(z.FejlDato.Month.ToString());
                            samligningDag = int.Parse(z.FejlDato.Day.ToString());
                        }
                        // Hvis året er det samme, skal måneden også tjekkes
                        else if (samligningÅr == int.Parse(z.FejlDato.Year.ToString()))
                        {
                            if (samligningMdr < int.Parse(z.FejlDato.Month.ToString()))
                            {
                                samligningÅr = int.Parse(z.FejlDato.Year.ToString());
                                samligningMdr = int.Parse(z.FejlDato.Month.ToString());
                                samligningDag = int.Parse(z.FejlDato.Day.ToString());
                            }
                                // Hvis måneden også er den samme som den der samlignes med
                            else if(samligningMdr == int.Parse(z.FejlDato.Month.ToString()))
                            {
                                // Tjekker om dagen er nyer
                                if(samligningDag < int.Parse(z.FejlDato.Day.ToString()))
                                {
                                    samligningÅr = int.Parse(z.FejlDato.Year.ToString());
                                    samligningMdr = int.Parse(z.FejlDato.Month.ToString());
                                    samligningDag = int.Parse(z.FejlDato.Day.ToString());
                                }
                                else if(samligningDag == int.Parse(z.FejlDato.Day.ToString()))
                                {
                                    samligningÅr = int.Parse(z.FejlDato.Year.ToString());
                                    samligningMdr = int.Parse(z.FejlDato.Month.ToString());
                                    samligningDag = int.Parse(z.FejlDato.Day.ToString());
                                }
                            }
                        }
                    }
                }
                #endregion

                // Hvis første gang
                if (listAntal.Count == 0)
                {
                    listAntal.Add(x.FejlType);
                }

                else
                {
                    int i = 0;

                    // Køre for hver i listen ad unikke fejl
                    while (i != listAntal.Count)
                    {
                        // Hvis den eksister på listen
                        if (listAntal[i] == x.FejlType)
                        {  
                            i = listAntal.Count;
                            eksister = true;
                        }
                        else
                        {
                            i++;                            
                        }
                    }
                }

                if (eksister == false)
                {
                    listAntal.Add(x.FejlType);
                    foreach (IClsFejllog y in systemController.VisAlleFejl())
                    {
                        if (samligning == y.FejlType)
                        {                            
                            antal++;
                        }
                    }

                    #region Tilføjer Decimal så det ser ordentligt ud på listen
                    string dag;
                    string måned;

                    if (samligningDag < 10)
                    {
                        dag = "0" + samligningDag;
                    }
                    else
                    {
                        dag = samligningDag.ToString();
                    }
                    
                    if (samligningMdr < 10)
                    {
                        måned = "0" + samligningMdr;
                    }
                    else
                    {
                        måned = samligningMdr.ToString();
                    }
                    #endregion


                    ListViewItem lvi = new ListViewItem();
                    lvi.SubItems[0].Text = dag + "-" + måned + "-" + samligningÅr;
                    lvi.SubItems.Add(antal.ToString());
                    lvi.SubItems.Add(x.FejlType);
                    lvStatistik.Items.Add(lvi);

                    listAntal.Add(x.FejlType);
                    eksister = false;
                }
             
            } 
        }
    }
}
